﻿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BlogConsumer
{
    class Program
    {
        static localhost.Service1 blogService = new localhost.Service1();

        public static void incluirPost()
        {
            int resposta = 0;
            do
            {
                Console.Clear();
                Console.WriteLine("############ ADICIONAR NOVO POST ############");
                Console.WriteLine();
                Console.Write("Informe o Autor: ");
                string autorAdd = Console.ReadLine();
                Console.Write("Informe a Categoria: ");
                string categoriaAdd = Console.ReadLine();
                Console.Write("Informe o Conteudo: ");
                string conteudoAdd = Console.ReadLine();

                string resultadoAdd = blogService.adicionarPost(conteudoAdd, autorAdd, categoriaAdd);
                Console.WriteLine();
                Console.WriteLine(resultadoAdd);

                Console.WriteLine();
                Console.WriteLine("Digite (0) para: Retornar o Menu Anterior");
                Console.WriteLine("Digite (1) para: Continuar a Adicionar Post");
                Console.Write("Digite sua opção: ");
                resposta = int.Parse(Console.ReadLine());

            } while (resposta == 1);
        }

        public static void atualizarPost()
        {
            Console.Clear();
            Console.WriteLine("############ ATUALIZAR POST ############");
            Console.WriteLine();
            Console.Write("Informe o Id: ");
            int idEdit = int.Parse(Console.ReadLine());

            if (blogService.contemPostId(idEdit))
            {
                Console.Write("Informe o Autor: ");
                string autorEdit = Console.ReadLine();
                Console.Write("Informe a Categoria: ");
                string categoriaEdit = Console.ReadLine();
                Console.Write("Informe o Conteudo: ");
                string conteudoEdit = Console.ReadLine();

                string resultadoEdit = blogService.atualizarPost(idEdit, conteudoEdit, autorEdit, categoriaEdit);
                Console.WriteLine(resultadoEdit);
            }
            else
            {
                Console.WriteLine("O id informado não existe!");
            }
        }

        public static void removerPost()
        {
            Console.Clear();
            Console.WriteLine("############ REMOVER POST ############");
            Console.WriteLine();
            Console.Write("Informe o Id: ");
            int idDelete = int.Parse(Console.ReadLine());

            if (blogService.contemPostId(idDelete))
            {
                string resultadoDelete = blogService.removerPost(idDelete);
                Console.WriteLine(resultadoDelete);
            }
            else
            {
                Console.WriteLine("O id informado não existe!");
            }
            Console.WriteLine();
            Console.WriteLine("Aperte ENTER para voltar!");
            Console.ReadLine();
        }

        public static void listarPost()
        {
            Console.Clear();
            Console.WriteLine("############ LISTAGEM POST ############");
            Console.WriteLine();
            localhost.Post[] array = blogService.retornarTodosPosts();

            if (array.Count() > 0)
            {
                foreach (localhost.Post post in array)
                {
                    Console.WriteLine("********** POSTS **********");
                    Console.WriteLine("Id: " + post.Id);
                    Console.WriteLine("Autor: " + post.Autor);
                    Console.WriteLine("Categoria: " + post.Categoria);
                    Console.WriteLine("Conteudo: " + post.Conteudo);
                    Console.WriteLine("Data: " + post.DateHora);
                    Console.WriteLine();
                    Console.WriteLine("********** COMENTÁRIOS **********");
                    localhost.Comentario[] array2 = blogService.retornarTodosComentarios(post.Id);

                    if (array2.Count() > 0)
                    {
                        foreach (localhost.Comentario coment in array2)
                        {
                            Console.WriteLine("Id: " + coment.Id);
                            Console.WriteLine("Autor: " + coment.Autor);
                            Console.WriteLine("Conteudo: " + coment.Conteudo);
                            Console.WriteLine("Data: " + coment.DateHora);
                            Console.WriteLine("-------------------------------");
                        }
                    }
                    else
                    {
                        Console.WriteLine("Post não possui comentários!");
                    }

                    Console.WriteLine();
                }
            }
            else
            {
                Console.WriteLine("Não há Posts cadastrados!");
            }
            Console.WriteLine();
            Console.WriteLine("Aperte ENTER para voltar!");
            Console.ReadLine();
        }

        public static Boolean contemPost()
        {
            Console.Clear();
            Console.WriteLine("############ VERFICACAO EXISTENCIA POST ############");
            Console.WriteLine();
            Console.Write("Informe o Id: ");
            int idExistencia = int.Parse(Console.ReadLine());
            return blogService.contemPostId(idExistencia);
        }

        public static void incluirComentario()
        {
            Console.Clear();
            Console.WriteLine("############ ADICIONAR COMENTÁRIO ############");
            Console.WriteLine();
            Console.Write("Informe o Id do Post: ");
            int idPost = int.Parse(Console.ReadLine());

            if (blogService.contemPostId(idPost))
            {
                Console.Write("Informe o Conteudo: ");
                string conteudoAdd = Console.ReadLine();
                Console.Write("Informe o Autor: ");
                string autorAdd = Console.ReadLine();

                string resultadoAdd = blogService.adicionarComentario(idPost, conteudoAdd, autorAdd);
                Console.WriteLine();
                Console.WriteLine(resultadoAdd);
            }
            else
            {
                Console.WriteLine();
                Console.WriteLine("O id do Post informado não existe!");
            }
            Console.WriteLine();
            Console.WriteLine("Aperte ENTER para voltar!");
            Console.ReadLine();

        }

        public static void atualizarComentario()
        {
            Console.Clear();
            Console.WriteLine("############ ATUALIZAR COMENTÁRIO ############");
            Console.WriteLine();
            Console.Write("Informe o Id do Post: ");
            int idPostEdit = int.Parse(Console.ReadLine());

            if (blogService.contemPostId(idPostEdit))
            {
                Console.Write("Informe o Id do Comentario: ");
                int idComentarioEdit = int.Parse(Console.ReadLine());

                if (blogService.contemComentarioId(idComentarioEdit))
                {
                    Console.Write("Informe o Conteudo: ");
                    string conteudoComentarioEdit = Console.ReadLine();
                    Console.Write("Informe o Autor: ");
                    string autorComentarioEdit = Console.ReadLine();

                    string resultadoEdit = blogService.atualizarComentario(idComentarioEdit, conteudoComentarioEdit,
                        autorComentarioEdit, idPostEdit);
                    Console.WriteLine(resultadoEdit);
                }
                else
                {
                    Console.WriteLine("O id do Comentario informado não existe!");
                }
            }
            else
            {
                Console.WriteLine("O id do Post informado não existe!");
            }
            Console.WriteLine();
            Console.WriteLine("Aperte ENTER para voltar!");
            Console.ReadLine();
        }

        public static void removerComentario()
        {
            Console.Clear();
            Console.WriteLine("############ REMOVER COMENTÁRIO ############");
            Console.WriteLine();
            Console.Write("Informe o Id do Post: ");
            int idPostRemove = int.Parse(Console.ReadLine());

            if (blogService.contemPostId(idPostRemove))
            {
                Console.Write("Informe o Id do Comentário: ");
                int idComentarioRemove = int.Parse(Console.ReadLine());

                if (blogService.contemComentarioId(idComentarioRemove))
                {
                    string resultadoDelete = blogService.removerComentario(idComentarioRemove);
                    Console.WriteLine(resultadoDelete);
                }
                else
                {
                    Console.WriteLine("O id do Comentário informado não existe!");
                }
            }
            else
            {
                Console.WriteLine("O id do Post informado não existe!");
            }
            Console.WriteLine();
            Console.WriteLine("Aperte ENTER para voltar!");
            Console.ReadLine();
        }

        public static void listarComentario()
        {
            Console.Clear();
            Console.WriteLine("############ LISTAGEM COMENTÁRIO ############");
            Console.WriteLine();
            Console.Write("Informe o Id do Post: ");
            int idPostRead = int.Parse(Console.ReadLine());
            Console.WriteLine();

            if (blogService.contemPostId(idPostRead))
            {
                localhost.Comentario[] array = blogService.retornarTodosComentarios(idPostRead);

                if (array.Count() > 0)
                {
                    foreach (localhost.Comentario coment in array)
                    {
                        Console.WriteLine("Id: " + coment.Id);
                        Console.WriteLine("Autor: " + coment.Autor);
                        Console.WriteLine("Conteudo: " + coment.Conteudo);
                        Console.WriteLine("Data: " + coment.DateHora);
                        Console.WriteLine("-------------------------------");
                    }
                }
                else
                {
                    Console.WriteLine("Post não possui comentários!");
                }
            }

            Console.WriteLine();
            Console.WriteLine("Aperte ENTER para voltar!");
            Console.ReadLine();
        }

        static void Main(string[] args)
        {
            int opcao = 0;

            do
            {
                Console.Clear();
                Console.WriteLine("-------------------Bem vindo a nossa aplicação!---------------");
                Console.WriteLine("Digite (1) para: Adicionar Post");
                Console.WriteLine("Digite (2) para: Atualizar Post");
                Console.WriteLine("Digite (3) para: Remover Post");
                Console.WriteLine("Digite (4) para: Listar Post");
                Console.WriteLine("Digite (5) para: Adicionar Comentário ao Post");
                Console.WriteLine("Digite (6) para: Atualizar Comentário do Post");
                Console.WriteLine("Digite (7) para: Remover Comentário do Post");
                Console.WriteLine("Digite (8) para: Listar Comentários do Post");
                Console.WriteLine("Digite (9) para: Verificar existência do Post");
                Console.WriteLine("Digite (0) para: Sair do Programa");
                Console.Write("Digite sua opção: ");

                opcao = int.Parse(Console.ReadLine());

                switch (opcao)
                {
                    case 0:
                        break;

                    case 1:
                        incluirPost();
                        break;

                    case 2:
                        atualizarPost();
                        break;

                    case 3:
                        removerPost();
                        break;

                    case 4:
                        listarPost();
                        break;

                    case 5:
                        incluirComentario();
                        break;

                    case 6:
                        atualizarComentario();
                        break;

                    case 7:
                        removerComentario();
                        break;

                    case 8:
                        listarComentario();
                        break;

                    case 9:
                        contemPost();
                        break;
                }

            } while (opcao != 0);
        }
    }
}